#include "ifs.h"

IFS::IFS()
{
}

void IFS::ReadBancos(ABB *arbol)
{
    ifstream Reader(ABancos);
    while(Reader.good())
    {
        std::string temp="";
        std::getline(Reader,temp);
        std::string k1="";
        k1=temp.substr(0,temp.find(SEP));
        int l1=atoi(k1.c_str());
        if(l1==0 || arbol->Valido(l1))
            continue;
        std::string k2 =temp.substr(temp.find(SEP)+1);
        arbol->Insertar(l1,k2);

    }
    Reader.close();
}
void IFS::ReadClientes(AVL *arbol)
{
    ifstream Reader(AClientes);
    while(Reader.good())
    {
        std::string temp="";
        std::getline(Reader,temp);
        std::string k1="";
        k1=temp.substr(0,temp.find(SEP));
        int l1=atoi(k1.c_str());
        temp.erase(0,temp.find(SEP)+1);
        std::string k2="";
        k2=temp.substr(0,temp.find(SEP));
        int l2=atoi(k2.c_str());
        if(l1==0 || arbol->Valido(l1)||l2==0)
            continue;
        std::string k3 =temp.substr(temp.find(SEP)+1);
        arbol->Insertar(l1,l2,k3);
    }
    Reader.close();
}
void IFS::ReadTarjetas(RN *arbol, ABB *Banco, AVL *Cliente)
{
    ifstream Reader(ATarjeta);
    while(Reader.good())
    {
        std::string temp="";
        std::getline(Reader,temp);
        std::string k1="";
        k1=temp.substr(0,temp.find(SEP));
        int l1=atoi(k1.c_str());
        temp.erase(0,temp.find(SEP)+1);
        std::string k2="";
        k2=temp.substr(0,temp.find(SEP));
        int l2=atoi(k2.c_str());
        temp.erase(0,temp.find(SEP)+1);
        std::string k3="";
        k3=temp.substr(0,temp.find(SEP));
        int l3=atoi(k3.c_str());
        temp.erase(0,temp.find(SEP)+1);
        std::string k4="";
        k4=temp.substr(0,temp.find(SEP));
        int l4=atoi(k4.c_str());

        if(l1==0 || arbol->Valido(l2)||l2==0 || l3==0|| l4 == 0 || !Banco->Valido(l3) || !Cliente->Valido(l2))
            continue;
        std::string k5 =temp.substr(temp.find(SEP)+1);
        arbol->Insertar(l2,l1,l3,l4,k5);
    }
    Reader.close();
}




void IFS::ReadRegisto(Splay *arbol, AVL *Cliente)
{

    ifstream Reader(ARegisto);
    while(Reader.good())
    {
        std::string temp="";
        std::getline(Reader,temp);
        std::string k1="";
        k1=temp.substr(0,temp.find(SEP));
        int l1=atoi(k1.c_str());
        if(l1==0 )//|| !Cliente->Valido(l1))  //revisa que la licencia exista
            continue;   //que continue con la siguiente linea si ve que no esta
        temp.erase(0,temp.find(SEP)+1);
        std::string k2="";
        k2=temp.substr(0,temp.find(SEP));
        int l2=atoi(k2.c_str());


        if(arbol->Valido(l2))  //revisa que la licencia este registrada
            continue;  //que continue con la siguiente linea si la licencia esta repetida

        temp.erase(0,temp.find(SEP)+1);
        std::string k3="";
        k3=temp.substr(0,temp.find(SEP));
        arbol->Insertar(l2,l1,k3);
    }
    Reader.close();
}




void IFS::SavePartes(AB<B> *arbol)
{
    ofstream ret(ABPartes);
    string iret=AB_BToSring(arbol->getRaiz());
    ret<<iret;
    ret<<BEND;
}
std::string IFS::AB_BToSring(Pagina<B> *arbol)
{
    string ret="";
    if(arbol==NULL)
        return ret;
    ret+=AB_BToSring(arbol->getPagina(0));
    for(int i=1; i<=arbol->getCuentas();i++)
    {
        ostringstream temp1;
        temp1<<arbol->getClave(i-1);
        ret+=temp1.str()+BSEP;
        ostringstream temp2;
        B str=arbol->getDato(i-1);
        temp2<<str.Placa;
        ret+=temp2.str()+BSEP;
        ostringstream temp3;
        temp3<<str.Monto;
        ret+=temp3.str()+BSEP;
        ret+=str.fecha+BSEP;
        ret+=str.hora+"\n";
        ret+=AB_BToSring(arbol->getPagina(i));
    }
    return ret;
}
void IFS::ReadPartes(AB<B> *arbol)
{
    ifstream Reader(ABPartes);
    while(Reader.good())
    {
        std::string temp="";
        std::getline(Reader,temp);
        if(temp==BEND)
            break;
        std::string k1="";
        k1=temp.substr(0,temp.find(BSEP));
        int l1=atoi(k1.c_str());
        temp.erase(0,temp.find(BSEP)+1);

        std::string k2="";
        k2=temp.substr(0,temp.find(BSEP));
        int l2=atoi(k2.c_str());
        temp.erase(0,temp.find(BSEP)+1);

        std::string k3="";
        k3=temp.substr(0,temp.find(BSEP));
        int l3=atoi(k3.c_str());
        temp.erase(0,temp.find(BSEP)+1);

        std::string k4="";
        k4=temp.substr(0,temp.find(BSEP));

        if(l1==0 || l2==0 || l3==0)
            continue;
        std::string k5 =temp.substr(temp.find(BSEP)+1);
        B str;
        str.Placa=l2;
        str.Monto=l3;
        str.fecha=k4;
        str.hora=k5;
        arbol->Insertar(l1,str);
    }
    Reader.close();
}
void IFS::WriteLog(string mensaj)
{
    ofstream Writer(ALog,ofstream::app);
    Writer<<mensaj;
    Writer<<std::endl;
    Writer.close();
}
